package com.groupYLP.CouponNexus.merchant.admin.config;

import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 布隆过滤器配置类
 */
@Configuration
public class RBloomFilterConfiguration {

    /**
     * 配置用于优惠券查询的布隆过滤器，以防止缓存穿透
     * 布隆过滤器是一种空间效率很高的数据结构，用于快速判断一个元素是否在集合中
     * 在此场景下，它用于在查询优惠券时过滤掉不必要的查询，从而减轻数据库压力
     *
     * @param redissonClient Redis客户端，用于存储和操作布隆过滤器的状态，
     * @return 返回一个初始化后的布隆过滤器实例，用于优惠券查询
     */
    @Bean
    public RBloomFilter<String> couponTemplateQueryBloomFilter(RedissonClient redissonClient) {
        // 获取名为"couponTemplateQueryBloomFilter"的布隆过滤器实例
        RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("couponTemplateQueryBloomFilter");
        // 尝试初始化布隆过滤器，参数分别为预期插入的元素数量和期望的误报率
        bloomFilter.tryInit(640L, 0.001);
        // 返回初始化后的布隆过滤器实例
        return bloomFilter;
    }
}

